Jaro–Winkler distance

In computer science and statistics, the Jaro–Winkler distance (Winkler, 1990) is a measure of similarity between two strings. It is a variant of the Jaro distance metric (Jaro, 1989, 1995) and mainly used in the area of record linkage (duplicate detection). The higher the Jaro–Winkler distance for two strings is, the more similar the strings are. The Jaro–Winkler distance metric is designed and best suited for short strings such as person names. The score is normalized such that 0 equates to no similarity and 1 is an exact match.

Contents

Definition

The Jaro distance d_j of two given strings s_1 and s_2 is

d_j = \frac{1}{3}\left(\frac{m}{|s_1|} %2B \frac{m}{|s_2|} %2B \frac{m-t}{m}\right)

where:

Two characters from s_1 and s_2 respectively, are considered matching only if they are not farther than \left\lfloor\frac{\max(|s_1|,|s_2|)}{2}\right\rfloor-1.

Each character of s_1 is compared with all its matching characters in s_2. The number of matching (but different sequence order) characters divided by the numeric value '2' defines the number of transpositions. For example. in comparing CRATE with TRACE, only 'R' 'A' 'E' are the matching characters, i.e, m=3. Although 'C', 'T' appear in both strings, they are farther than 1.5, i.e., (5/2)-1=1.5. Therefore, t=0 . In DwAyNE versus DuANE the matching letters are already in the same order D-A-N-E, so no transpositions are needed.

Jaro–Winkler distance uses a prefix scale p which gives more favourable ratings to strings that match from the beginning for a set prefix length \ell. Given two strings s_1 and s_2, their Jaro–Winkler distance d_w is:

d_w = d_j %2B (\ell p (1 - d_j))

where:

Although often referred to as a distance metric, the Jaro–Winkler distance is actually not a metric in the mathematical sense of that term.

Example

Note that Winkler's "reference" C code differs in at least two ways from published accounts of the Jaro–Winkler metric. First is his use of a typo table (adjwt) and also some optional additional tolerance for long strings.

Given the strings s_1 MARTHA and s_2 MARHTA we find:

We find a Jaro score of:

d_j = \frac{1}{3}\left(\frac{6}{6} %2B \frac{6}{6} %2B \frac{6-1}{6}\right) = 0.944

To find the Jaro–Winkler score using the standard weight p = 0.1, we continue to find:

Thus:

d_w = 0.944 %2B (3 * 0.1 (1 - 0.944)) = 0.961

Given the strings s_1 DWAYNE and s_2 DUANE we find:

We find a Jaro score of:

d_j = \frac{1}{3}\left(\frac{4}{6} %2B \frac{4}{5} %2B \frac{4-0}{4}\right) = 0.822

To find the Jaro–Winkler score using the standard weight p = 0.1, we continue to find:

Thus:

d_w = 0.822 %2B (1 * 0.1 (1 - 0.822)) = 0.84

Given the strings s_1 DIXON and s_2 DICKSONX we find:

D I X O N
D 1 0 0 0 0
I 0 1 0 0 0
C 0 0 0 0 0
K 0 0 0 0 0
S 0 0 0 0 0
O 0 0 0 1 0
N 0 0 0 0 1
X 0 0 0 0 0

We find a Jaro score of:

d_j = \frac{1}{3}\left(\frac{4}{5} %2B \frac{4}{8} %2B \frac{4-0}{4}\right) = 0.767

To find the Jaro–Winkler score using the standard weight p = 0.1, we continue to find:

Thus:

d_w = 0.767 %2B (2 * 0.1 (1 - 0.767)) = 0.813

See also

References

External links